package a00_LeetCode.LinkedList;

/**
 * @Author quan
 * @Description 给你单链表的头结点 head ，请你找出并返回链表的中间结点。
 * 如果有两个中间结点，则返回第二个中间结点。
 * @Date 2023/3/19 10:29
 */
public class Num876_MiddleOfList {
    public ListNode middleNode(ListNode head) {
        /**
         * 方法1：快慢指针法
         * 结论：让第一个和第二个指针都指向头结点，让第一个指针每次走一步，第二指针每次都两步，
         * 当第二个指针走向null的时候，第一个指针所指的位置就是中间节点的位置
         */
        ListNode first = head;
        ListNode second = head;
        while (second!=null && second.next!=null){
            first = first.next;
            second = second.next.next;
        }
        //说明此时第二个指针指向的是Null
        return first;
        /**
         * 方法2：遍历链表，根据链表的长度判断：自己写
         */

    }
}
